package com.cmic.rcs.emoji.controller.web;


import com.cmic.rcs.emoji.entity.pojo.TDataConfig;
import com.cmic.rcs.emoji.service.DataConfigService;
import com.cmic.rcs.enhance.message.g5.core.common.Response;
import com.cmic.rcs.enhance.message.g5.core.common.ResponseData;
import com.cmic.rcs.enhance.message.g5.core.common.ReturnCodeEnum;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * 数据配置控制器
 * 
 * @author 系统生成
 * @since 2024-01-01
 */
@RestController
@RequestMapping("/api/web/data-config")
@Slf4j
public class DataConfigController {

    @Autowired
    private DataConfigService dataConfigService;

    /**
     * 保存或更新数据配置
     * 
     * @param dataConfig 数据配置信息
     * @return 操作结果
     */
    @PostMapping("/save")
    public Response saveDataConfig(@RequestBody TDataConfig dataConfig) {
        log.info("保存数据配置，企业编码：{}", dataConfig.getEnterpriseCode());
        try {
            TDataConfig savedConfig = dataConfigService.saveDataConfig(dataConfig);
            log.info("数据配置保存成功，企业编码：{}", dataConfig.getEnterpriseCode());
            return ResponseData.OK(savedConfig);
        } catch (RuntimeException e) {
            log.error("数据配置保存失败，企业编码：{}, 错误信息：{}", dataConfig.getEnterpriseCode(), e.getMessage());
            return ResponseData.Error(ReturnCodeEnum.SYSTEM_ERROR, e.getMessage());
        }
    }

    /**
     * 获取企业数据配置
     * 
     * @param enterpriseCode 企业编码
     * @return 数据配置信息
     */
    @PostMapping("/get-by-enterprise")
    public Response getDataConfigByEnterpriseCode(@RequestParam("enterpriseCode") String enterpriseCode) {
        log.info("获取企业数据配置，企业编码：{}", enterpriseCode);
        try {
            TDataConfig dataConfig = dataConfigService.getDataConfigByEnterpriseCode(enterpriseCode);
            if (dataConfig == null) {
                log.info("未找到企业数据配置，企业编码：{}", enterpriseCode);
                return ResponseData.OK(null);
            }
            return ResponseData.OK(dataConfig);
        } catch (RuntimeException e) {
            log.error("获取企业数据配置失败，企业编码：{}, 错误信息：{}", enterpriseCode, e.getMessage());
            return ResponseData.Error(ReturnCodeEnum.SYSTEM_ERROR, e.getMessage());
        }
    }

    /**
     * 获取企业指定类型的数据配置
     * 
     * @param enterpriseCode 企业编码
     * @param dataType 数据类型：EFFICIENCY-质效提升视窗，OPERATION-业务运行视窗
     * @return 数据配置信息
     */
    @PostMapping("/get-by-type")
    public Response getDataConfigByType(@RequestParam("enterpriseCode") String enterpriseCode, 
                                       @RequestParam("dataType") String dataType) {
        log.info("获取企业指定类型数据配置，企业编码：{}, 数据类型：{}", enterpriseCode, dataType);
        try {
            TDataConfig dataConfig = dataConfigService.getDataConfigByEnterpriseCodeAndDataType(enterpriseCode, dataType);
            if (dataConfig == null) {
                log.info("未找到企业指定类型数据配置，企业编码：{}, 数据类型：{}", enterpriseCode, dataType);
                // 根据业务原型图设置默认值
                return ResponseData.OK(getDefaultDataConfig(enterpriseCode, dataType));
            }
            return ResponseData.OK(dataConfig);
        } catch (RuntimeException e) {
            log.error("获取企业指定类型数据配置失败，企业编码：{}, 数据类型：{}, 错误信息：{}", enterpriseCode, dataType, e.getMessage());
            return ResponseData.Error(ReturnCodeEnum.SYSTEM_ERROR, e.getMessage());
        }
    }

    /**
     * 根据业务原型图获取默认数据配置
     * 
     * @param enterpriseCode 企业编码
     * @param dataType 数据类型
     * @return 默认数据配置
     */
    private TDataConfig getDefaultDataConfig(String enterpriseCode, String dataType) {
        TDataConfig defaultConfig = new TDataConfig();
        defaultConfig.setEnterpriseCode(enterpriseCode);
        defaultConfig.setDataType(dataType);
        
        if ("EFFICIENCY".equals(dataType)) {
            // 质效提升视窗默认值
            defaultConfig.setCostSavings(1000); // 节省建设成本(万)
            defaultConfig.setCycleReduction(80); // 平均建设周期降低(百分比)
            defaultConfig.setDataDescription("平均建设周期由1年降低为2个月");
        } else if ("OPERATION".equals(dataType)) {
            // 业务运行视窗默认值
            defaultConfig.setMessageSuccessRate(100); // 消息发送成功率(百分比)
            defaultConfig.setEmailSuccessRate(100); // 邮件发送成功率(百分比)
            defaultConfig.setDocumentSuccessRate(100); // 公文发送成功率(百分比)
        }
        
        return defaultConfig;
    }
}